
// 产品模块
const sequelize = require('../config/operateDB');
const {Sequelize, DataTypes, Op} = require('sequelize');
const {User} = require('./users');


const Words = sequelize.define('words', {
    id: {
        type: DataTypes.UUID,
        allowNull: false,
        primaryKey: true,
        defaultValue: Sequelize.UUIDV4,
    },
    en: {
        type: DataTypes.TEXT,
        allowNull: false,
    },
    zh: {
        type: DataTypes.TEXT,
        allowNull: false,
    },
    yb: {
        type: DataTypes.TEXT,
        allowNull: false,
    }
}, {

});

async function initWords() {
    await Words.sync();
    const wordsJSON = [
        {
            en: 'bank',
            zh: '银行；岸；库；河畔',
            yb: '[bæŋk]',
        },
        {
            en: 'onion',
            zh: '洋葱',
            yb: '[ʌnjən]',
        },
        {
            en: 'wheel',
            zh: '轮子，车轮，方向盘，周期，旋转',
            yb: '[wi:l]',
        },
        {
            en: 'bamboo',
            zh: '竹，竹子',
            yb: "[bæm'bu:]",
        },
        {
            en: 'horse',
            zh: '马，骑马',
            yb: '[hɔ:s]',
        },
        {
            en: 'hope',
            zh: '希望，期望，盼望',
            yb: '[həup]',
        },
        {
            en: 'bee',
            zh: '蜜蜂，蜂；勤劳的人',
            yb: '[bi:]',
        },
        {
            en: 'hike',
            zh: '徒步旅行，远足，涨价',
            yb: '[haik]',
        },
        {
            en: 'wheel',
            zh: '轮子，车轮，方向盘，周期，旋转',
            yb: '[wi:l]',
        },
        {
            en: 'bad',
            zh: ' 坏的；严重的；劣质的',
            yb: '[bæd]',
        },
        {
            en: 'our',
            zh: '我们的',
            yb: "['auə]",
        },
        {
            en: 'bed',
            zh: '床，河床，底层，基座',
            yb: '[bed]',
        },
        {
            en: 'brush',
            zh: '刷子，画笔，灌木丛',
            yb: '[brʌʃ]',
        },
        {
            en: 'bandage',
            zh: '绷带',
            yb: "['bændidʒ]",
        },
        {
            en: 'chemistry',
            zh: '化学',
            yb: "['kemistri]",
        },
        {
            en: 'bag',
            zh: '袋；袋状物；包；一袋的量',
            yb: '[bæg]',
        },
        {
            en: 'truth',
            zh: '真像，真实，真理，事实',
            yb: '[tru:θ]',
        },
        {
            en: 'vampire',
            zh: '吸血鬼',
            yb: "['væmpaiə]",
        },
        {
            en: 'musical',
            zh: '音乐的，音乐片',
            yb: "['mju:zikəl]",
        },
        {
            en: 'talent',
            zh: '才能，人才，天资',
            yb: "['tælənt]",
        },
        {
            en: 'show',
            zh: '显示，表现，表演，事情',
            yb: '[ʃəu]',
        },
        {
            en: 'really',
            zh: '真正地，实在，事实上',
            yb: "['riəli]",
        },
        {
            en: 'snake',
            zh: '蛇，蜿蜒，扭曲，拖曳，曲折前进',
            yb: '[sneik]',
        },
        {
            en: 'worst',
            zh: '最坏的；最差的；最不利的',
            yb: '[wə:st]',
        },
        {
            en: 'polite',
            zh: '有礼貌的，客气的，有教养的，文雅的',
            yb: "[pə'lait]",
        },
        {
            en: 'teach',
            zh: '教，教书，教导，教训',
            yb: '[ti:tʃ]',
        },
        {
            en: 'confidence',
            zh: '骗得信任的，信任，信心，把握',
            yb: "['kɔnfidəns]",
        },
        {
            en: 'imagination',
            zh: '想象，想象力，空想',
            yb: "[i.mædʒi'neiʃən]",
        },
        {
            en: 'policy',
            zh: '政策，方针，保险单',
            yb: "['pɔlisi]",
        },
        {
            en: 'realize',
            zh: '了解，意识到，实现，净得',
            yb: "['riəlaiz]",
        },
        {
            en: 'certain',
            zh: '确定的，必然的，特定的',
            yb: "['sə:tn]",
        },

    ];
    const count = await Words.count();
    if (0 === count) {
        await Words.bulkCreate(wordsJSON);
        console.log('初始化单词成功！');
    }
}
initWords();

const wordsModel = {
    async getWords(ctx) {
        const params = ctx.query;
        // const count = await Words.count();
        const {offset = 0, limit = 20} = params;

        let info = await Words.findAll(
            {
                order: [ 
                    [Sequelize.literal('RAND()')] 
                ],
                limit: parseInt(limit),
            }
        );
        
        ctx.pageRes({
            limit: parseInt(limit),
            offset,
            list: info,
            total: info.count,
        });
    },
    async rememberWords(ctx) {
        // const params = ctx.query;
        const id = ctx.session.sessionData.id;
        const user = await User.findOne({
            where: {
                id,
            },
            raw: true,
        });
        user.rememberWords += 1;

        await User.update({
            ...user,
        }, {
            where: {
                id
            },
        });

        ctx.success('增加成功');
    },
};


module.exports = {
    wordsModel,
    Words
};